package org.ciallo.simplemusicplayer.data.model;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;

/**
 * @author Jukomu
 * @Description: 代表用户创建的歌单的实体
 * @Package: org.ciallo.simplemusicplayer.data.model
 * @Project: SimpleMusicPlayer
 * @name: Playlist
 * @Date: 2025/5/30-00:57
 * @Filename: Playlist
 */
@Entity(tableName = "playlists")
public class Playlist {

    /**
     * 歌单的唯一ID，自动生成。
     */
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    public long id;

    /**
     * 歌单名称。
     */
    @ColumnInfo(name = "name")
    public String name;

    /**
     * 歌单描述 (可选)。
     */
    @ColumnInfo(name = "description")
    public String description;

    /**
     * 歌单创建的时间戳 (毫秒)。
     */
    @ColumnInfo(name = "creation_date")
    public long creationDate;

    /**
     * 歌单中歌曲的数量。
     * 这个字段可以通过查询关联表动态计算，或者在这里作为冗余字段方便显示。
     * 如果作为冗余字段，需要在添加/删除歌曲到歌单时手动更新。
     * 为了简单起见，我们先将其设为可在DAO中更新的字段。
     */
    @ColumnInfo(name = "song_count", defaultValue = "0")
    public int songCount;

    /**
     * Room 需要一个无参构造函数。
     */
    public Playlist() {
    }

    /**
     * 创建新歌单的构造函数 (不包括ID，ID自动生成)。
     *
     * @param name          歌单名称。
     * @param description   歌单描述。
     * @param creationDate  创建时间。
     */
    @Ignore
    public Playlist(String name, String description, long creationDate) {
        this.name = name;
        this.description = description;
        this.creationDate = creationDate;
        this.songCount = 0; // 新建时歌曲数量为0
    }

    // --- Getters and Setters (Room可以直接访问public字段，但提供getter/setter是好习惯) ---

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public long getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(long creationDate) {
        this.creationDate = creationDate;
    }


    public int getSongCount() {
        return songCount;
    }

    public void setSongCount(int songCount) {
        this.songCount = songCount;
    }
}
